#include "union.h"
#include "mytools.h"
#include <stdio.h>

/// @brief union 声明
/// @details 声明一个 union
/// 类型变量，并对其进行初始化，然后对其成员变量进行访问和修改。union
/// 类型变量可以存储不同的数据类型，但只能存储其中一种数据类型的值。
void union_declaration() {
  print_title("Union Declaration");
  {
    // 独占
    Data data;
    data.i = 10;
    // 打印 data.i
    printf("data.i = %d\n", data.i);
    // 打印 data.f
    printf("data.f = %f\n", data.f);

    data.f = 20.123;
    // 打印 data.i
    printf("data.i = %d\n", data.i);
    // 打印 data.f
    printf("data.f = %f\n", data.f);
    // printf("data.i = %d, data.f = %d\n", data.i, data.f);

    data.s = "hello";
    printf("data.f = %f\n", data.f);
    // 打印 data.s
    printf("data.s = %s\n", data.s);
  }
  {
    MixStruct mix;
    mix.i = 10;
    mix.j = 20;
    mix.m = 113;
    mix.w.k = 5; // mix.i 失效
    mix.w.l = 4;
    // 打印 mix.i
    printf("mix.i = %d\n", mix.i);
    // 打印 mix.m
    printf("mix.m = %d\n", mix.m);
    // 打印 mix.w.k
    printf("mix.w.k = %ld\n", mix.w.k);
  }
}